package movilmax.sia_corp.action;

import java.util.ArrayList;
import java.util.LinkedList;
import java.util.List;
import java.util.Map;

import movilmax.sia_corp.model.Listax;
import movilmax.sia_corp.model.Usuario;
import movilmax.sia_corp.model.Actividad;



import apli.conectar.Conectar;
import basedatos.Resultado;
import basedatos.Fecha;
import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.ActionSupport;


public class Actividades  extends ActionSupport {

	private static final long serialVersionUID = -243952532618328892L;
	private String actividad;
    private String detalle;
    private String obs;
    private String cod_prospecto;
    private String destinatario;
    private String tipo;
    private String mensaje;
    private String codigo;
    private LinkedList<Actividad> historico;
	private List<Listax>  actividades;
	private List<Listax>  detalle_act;
	
	private Conectar BASE;
	
	public void validate(){	
		try{
			if ( this.getCod_prospecto().length() == 0 ){	
				this.addActionError("Debe cargar el prospecto" );
				return;
			}
			if(this.actividad!=null){
				if ( this.getActividad().equals("-1") || this.getActividad().trim().equals("") ){	
					this.addActionError( "Debe seleccionar la actividad" );
					return;
				}
			}
			if(this.detalle !=null){
				if ( this.getDetalle().equals("-1") || this.getDetalle().trim().equals("") ){	
					this.addActionError( "Debe seleccionar el detalle" );
					return;
				}
			}
			if ( this.getObs().length() == 0 ){	
				this.addActionError( "Debe ingresar las observaciones" );
				return;
			}
			
		}catch(Exception err){
			//this.addActionMessage( "Error"+err.toString() );	
		}
	} 
	
	@SuppressWarnings("rawtypes")
	public String mostrar() throws Exception {
		 Map session = ActionContext.getContext().getSession();
		 Usuario USUARIO = (Usuario)session.get("ses_usuario");
 	     if (USUARIO==null){	
 	    	this.addActionError( "La sesion del usuario ha caducado" ); 
 	    	return ERROR;
 	     }
		 session.remove("ses_ctd_prec");
		 session.remove("ses_tabla_ss");
		 session.remove("ses_tabla_cc");
		 session.remove("ses_ctd_itss");
		 session.remove("ses_ctd_iteco");
		 
	     return SUCCESS;
    } 

	/*---------------------------------------------------------------------------------------------------------------------*/
	public String valPrecondicion(String prospecto,String actividad){
	      String  SQL = "select Y.descripcion as des from corp_seguimiento_actividades S,corp_detalles_actividad D,corp_seguimiento_actividades Z,"+
	       "corp_detalles_actividad Y  where S.prospecto='" + prospecto + "' and S.detalle=D.precondicion and D.cod='" + actividad + "' and Z.detalle=S.detalle and S.procesado='0' and Z.procesado='0' and Z.detalle=Y.cod";
	      Resultado  RCS=BASE.getBaseDatos().consultar(SQL);
		  if(RCS.RP==true){
	    	    return SUCCESS;
	      }else{
	            SQL = "select Y.descripcion as des from corp_detalles_actividad D,corp_detalles_actividad Y where D.cod='"+ actividad +"' and D.precondicion =Y.cod ";
	            RCS=BASE.getBaseDatos().consultar(SQL);
	            if(RCS.RP==true){
	            	 SQL = "select Y.descripcion as des from corp_detalles_actividad Y where Y.cod='"+ actividad+"'";
	            	 Resultado RCS_=BASE.getBaseDatos().consultar(SQL);
	            	 this.addActionError("Antes de procesar "+RCS_.getCadena("des")+" se debe realizar la precondicion ("+RCS.getCadena("des").toUpperCase()+" ) ");
	            	  
	            	 return ERROR;
	            }
	      }
		return SUCCESS;
	}
	

	public String valPostCondicion(String prospecto,String actividad){
	     String SQL = "select Y.descripcion as des from corp_seguimiento_actividades S,corp_detalles_actividad D,corp_seguimiento_actividades Z,corp_detalles_actividad Y where S.prospecto='" + prospecto + "' and S.detalle=D.postcondicion and D.cod='" + actividad + "' and Z.detalle=S.detalle and Z.detalle=Y.cod  and S.procesado='0' and Z.procesado='0' ";
	      Resultado  RCS=BASE.getBaseDatos().consultar(SQL);
		  if(RCS.RP==true){
			   this.addActionError("No se puede modificar el item debido a que "+RCS.getCadena("des")+" ya fue realizada ");
	    	   return  ERROR;
	      }else{
	            return SUCCESS;
	      }      	
	}
	
	@SuppressWarnings({ "rawtypes", "static-access" })
	public String mostrar_sucursales() throws Exception {
		 Map session = ActionContext.getContext().getSession();
		 Usuario USUARIO = (Usuario)session.get("ses_usuario");
 	     if (USUARIO==null){	
 	    	this.addActionError("La sesion del usuario ha caducado" ); 
 	    	return ERROR;
 	     }
		 session.remove("ses_ctd_prec");
		 session.remove("ses_tabla_ss");
		 session.remove("ses_tabla_cc");
		 session.remove("ses_ctd_itss");
		 session.remove("ses_tabla_eco");
		 session.remove("ses_ctd_iteco");
		 BASE= new Conectar();
		 
		 System.out.println("El codigo del prospecto es: "+this.getCod_prospecto()); //Esto obviamente NO esta funcionando porque no esta pasando el ID del prospecto
		 
		 String rp1=  valPrecondicion(this.getCod_prospecto(), "9993");
		 if(rp1==this.SUCCESS )
		 {
			 return valPostCondicion(this.getCod_prospecto(), "9993");
		 }
		 else
		 {
			BASE.getBaseDatos().cerrarConexion();  
			return this.ERROR; 
		 }	 	 
    }
	
	@SuppressWarnings({ "rawtypes", "static-access" })
	public String mostrar_sucursales2() throws Exception {
		
		//System.out.println("Centinela: Actividades: mostrar_sucursales2");
		
		 Map session = ActionContext.getContext().getSession();
		 Usuario USUARIO = (Usuario)session.get("ses_usuario");
 	     if (USUARIO==null){	
 	    	this.addActionError("La sesion del usuario ha caducado" ); 
 	    	return ERROR;
 	     }
		 session.remove("ses_ctd_prec");
		 session.remove("ses_tabla_ss");
		 session.remove("ses_tabla_cc");
		 session.remove("ses_ctd_itss");
		 session.remove("ses_tabla_eco");
		 session.remove("ses_ctd_iteco");
		 
		 //System.out.println("El codigo del prospecto es: "+this.getCod_prospecto()); //Esto obviamente NO esta funcionando porque no esta pasando el ID del prospecto
		 
		 return SUCCESS;
    }	

	@SuppressWarnings("rawtypes")
	public String mostrar_contactos() throws Exception {
		 Map session = ActionContext.getContext().getSession();
		 Usuario USUARIO = (Usuario)session.get("ses_usuario");
 	     if (USUARIO==null){	
 	    	this.addActionError( "La sesion del usuario ha caducado" ); 
 	    	return ERROR;
 	     }
		 session.remove("ses_ctd_prec");
		 session.remove("ses_tabla_ss");
		 session.remove("ses_tabla_cc");
		 session.remove("ses_ctd_itss");
		 session.remove("ses_tabla_eco");
		 session.remove("ses_ctd_iteco");
		 BASE= new Conectar();
		 String rp1=  valPrecondicion(this.getCod_prospecto(), "9992");
		 if(rp1==SUCCESS ){
			 return valPostCondicion(this.getCod_prospecto(), "9992");
		 }else{
			BASE.getBaseDatos().cerrarConexion(); 
			return ERROR; 
		 }	 
   } 
	@SuppressWarnings({ "rawtypes", "static-access" })
	public String mostrar_propuesta() throws Exception {
		 Map session = ActionContext.getContext().getSession();
		 Usuario USUARIO = (Usuario)session.get("ses_usuario");
 	     if (USUARIO==null){	
 	    	this.addActionError( "La sesion del usuario ha caducado" ); 
 	    	return ERROR;
 	     }
		 session.remove("ses_ctd_prec");
		 session.remove("ses_tabla_ss");
		 session.remove("ses_tabla_cc");
		 session.remove("ses_ctd_itss");
		 session.remove("ses_tabla_eco");
		 session.remove("ses_ctd_iteco");
		 BASE= new Conectar();
		 String rp1=  valPrecondicion(this.getCod_prospecto(), "2");
		 if(rp1==this.SUCCESS ){
			 return valPostCondicion(this.getCod_prospecto(), "2");
		 }else{
			BASE.getBaseDatos().cerrarConexion(); 
			return this.ERROR; 
		 }	 
    } 

	@SuppressWarnings("rawtypes")
	public String mostrar_precontrato() throws Exception {
		 Map session = ActionContext.getContext().getSession();
		 Usuario USUARIO = (Usuario)session.get("ses_usuario");
 	     if (USUARIO==null){	
 	    	this.addActionError( "La sesion del usuario ha caducado" ); 
 	    	return ERROR;
 	     }
		 session.remove("ses_ctd_prec");
		 session.remove("ses_tabla_ss");
		 session.remove("ses_tabla_cc");
		 session.remove("ses_ctd_itss");
		 session.remove("ses_tabla_eco");
		 session.remove("ses_ctd_iteco");
		 /*if(this.getTipo().equals("PYME") ){
			 this.addActionError("La actividad ingresar precontrato no aplica al tipo de prospecto PYME ");
			 return this.ERROR; 
		 }*/
		 BASE= new Conectar();
		 String rp1=  valPrecondicion(this.getCod_prospecto(), "3");
		 if(rp1==SUCCESS ){
			 return valPostCondicion(this.getCod_prospecto(), "3");
		 }else{
			BASE.getBaseDatos().cerrarConexion(); 
			return ERROR; 
		 }	 
		 //return  valPrecondicion(this.getCod_prospecto(), "3");
    } 
    
	@SuppressWarnings("rawtypes")
	public String mostrar_site() throws Exception {
		 Map session = ActionContext.getContext().getSession();
		 Usuario USUARIO = (Usuario)session.get("ses_usuario");
 	     if (USUARIO==null){	
 	    	this.addActionError( "La sesion del usuario ha caducado" ); 
 	    	return ERROR;
 	     }
		 session.remove("ses_ctd_prec");
		 session.remove("ses_tabla_ss");
		 session.remove("ses_tabla_cc");
		 session.remove("ses_ctd_itss");
		 session.remove("ses_tabla_eco");
		 session.remove("ses_ctd_iteco");
		 if(this.getTipo().equals("PYME") ){
			 this.addActionError("La actividad ingresar site survey no aplica al tipo de prospecto PYME ");
			 return ERROR; 
		 }
		 BASE= new Conectar();
		 String rp1=  valPrecondicion(this.getCod_prospecto(), "4");
		 if(rp1==SUCCESS ){
			 return valPostCondicion(this.getCod_prospecto(), "4");
		 }else{
			BASE.getBaseDatos().cerrarConexion();  
			return ERROR; 
		 }	 
		 //return  valPrecondicion(this.getCod_prospecto(), "4");
   } 

@SuppressWarnings("rawtypes")
public String mostrar_economic() throws Exception {
		 Map session = ActionContext.getContext().getSession();
		 Usuario USUARIO = (Usuario)session.get("ses_usuario");
 	     if (USUARIO==null){	
 	    	this.addActionError( "La sesion del usuario ha caducado" ); 
 	    	return ERROR;
 	     }
		 session.remove("ses_ctd_prec");
		 session.remove("ses_tabla_ss");
		 session.remove("ses_tabla_cc");
		 session.remove("ses_ctd_itss");
		 session.remove("ses_tabla_eco");
		 session.remove("ses_ctd_iteco");
		 if(this.getTipo().equals("PYME") ){
			 this.addActionError("La actividad ingresar presupuesto no aplica al tipo de prospecto PYME ");
			 return ERROR; 
		 }
		 BASE= new Conectar();
		 String rp1=  valPrecondicion(this.getCod_prospecto(), "16");
		 if(rp1==SUCCESS ){
			 return valPostCondicion(this.getCod_prospecto(), "16");
		 }else{
			BASE.getBaseDatos().cerrarConexion();  
			return ERROR; 
		 }	 
	     //return  valPrecondicion(this.getCod_prospecto(), "16");
    }

	@SuppressWarnings("rawtypes")
	public String mostrar_check_list() throws Exception {
		 Map session = ActionContext.getContext().getSession();
		 Usuario USUARIO = (Usuario)session.get("ses_usuario");
 	     if (USUARIO==null){	
 	    	this.addActionError( "La sesion del usuario ha caducado" ); 
 	    	return ERROR;
 	     }
		 session.remove("ses_ctd_prec");
		 session.remove("ses_tabla_ss");
		 session.remove("ses_tabla_cc");
		 session.remove("ses_ctd_itss");
		 session.remove("ses_tabla_eco");
		 session.remove("ses_ctd_iteco");
		 BASE= new Conectar();
		 String rp1= "";
		 if(this.getTipo().equals("PYME") ){
			 Resultado RCS=BASE.getBaseDatos().consultar("Select codigo from corp_precontrato where prospecto='"+ this.getCod_prospecto() +"' and not status in('PROCESADO','RECHAZADO') ");
			 if(RCS.RP==false){
				  this.addActionError("Antes de generar el check list debe ingresar la firma del contrato");
				  BASE.getBaseDatos().cerrarConexion(); 
				  return ERROR;  
			 }
			 BASE.getBaseDatos().cerrarConexion(); 
			 return SUCCESS;	
		 }else{
			 rp1=  valPrecondicion(this.getCod_prospecto(), "19");
			 if(rp1==SUCCESS ){
				 return valPostCondicion(this.getCod_prospecto(), "19");
			 }else{
				 BASE.getBaseDatos().cerrarConexion(); 
				 return ERROR; 
			 }	
		 }
		 
		 
		  
    }

	/*---------------------------------------------------------------------------------------------------------------------*/
	@SuppressWarnings("rawtypes")
	public String guardar() throws Exception {
    		Map session = ActionContext.getContext().getSession();
    	    Usuario USUARIO = (Usuario)session.get("ses_usuario");
    	    if (USUARIO!=null){	
    	    	BASE= new Conectar();
    	    	if(BASE.getMsg().equals("SI")){	
    	    		try{
    	    			Fecha F=new Fecha();
    	    			String FECHA=F.getFecha();
    	    			String HORA=F.getHoras();
	  		    	    String SQL="INSERT INTO corp_seguimiento_actividades " +
	  		    			"(prospecto,actividad,detalle,obs,usuario,fecha,hora) "+
	  		    			"VALUES('"+this.getCod_prospecto()+"','"+ this.getActividad() +"','"+ this.getDetalle() +"','"+ this.getObs() +"','"+ USUARIO.getUsuario() +"','"+ FECHA +"','"+HORA+"' )";
	  		    	    BASE.getBaseDatos().ejecutar(SQL); 
	  		    	    this.addActionMessage(" Actividad registrada correctamente ("+FECHA+" "+HORA+" ) ");
	  		    	  BASE.getBaseDatos().cerrarConexion(); 
	  		    	 return SUCCESS; 	
    	    	  }catch(Exception err  ){
  				    this.addActionError("Error: "+err.toString());
  				    BASE.getBaseDatos().cerrarConexion(); 
  			 	} 
  		   }
  		   else
  			 this.addActionError("No hay conexion al servidor");  
    	   } 
    	  else
    		  this.addActionError("La sesion del usuario ha caducado");   	
    	
    	   return ERROR;
	} 
	

	private String listar_actividades()  {
		actividades=new ArrayList<Listax>();
			  try{
		    	String SQL="Select * From corp_actividades A Where mostrar='1' and pros='1' Order by descripcion";
				Resultado  RCS=BASE.getBaseDatos().consultar(SQL);
				  if(RCS.RP){
					  do{ 
						  Listax LST=new Listax();
						  LST.setCod(RCS.getCadena("cod"));
						  LST.setDescripcion(RCS.getCadena("descripcion"));
						  actividades.add(LST);
					  }while(RCS.sigItem()); 
				  }
			   }catch(Exception err  ){
					//hubo un error .....
			}  
		  return SUCCESS;
	} 
	private String listar_det_actividades(){
		detalle_act=new ArrayList<Listax>();
		if(actividad!=null){
			  try{
				String SQL="Select max(X.detalle) ult_c From  corp_seguimiento_actividades X " +
					" Where X.prospecto='"+this.getCod_prospecto() +"' ";
			   Resultado  RCS=BASE.getBaseDatos().consultar(SQL);
			   int ult_cod=0;
			   if(RCS.RP){
				   ult_cod=RCS.getInt("ult_c"); 
			   }
		       SQL="Select D.cod,D.descripcion,D.precondicion  From  corp_detalles_actividad D,corp_det_actividades X " +
				" Where D.mostrar='1' and D.cod=X.detalle and X.mostrar='1' and X.actividad='"+this.getActividad() +"' and D.pros='1' Order by D.descripcion";
				RCS=BASE.getBaseDatos().consultar(SQL);
				  if(RCS.RP){
					  do{ 
						 if(RCS.getInt("precondicion")<=ult_cod){
							  Listax LST=new Listax();
							  LST.setCod(RCS.getCadena("cod"));
							  LST.setDescripcion(RCS.getCadena("descripcion"));
							  detalle_act.add(LST);
						 }	
					  }while(RCS.sigItem()); 
				  }
			   }catch(Exception err  ){
					//hubo un error .....
		  }
		}	
		return SUCCESS;
	}  
	
    @SuppressWarnings("rawtypes")
	public String getJSON(){
		  Map session = ActionContext.getContext().getSession();
		  Usuario USUARIO = (Usuario)session.get("ses_usuario");
		  if (USUARIO==null){
			  this.addActionError("La sesion del usuario ha caducado");
			  return ERROR;
		  }
		 BASE= new Conectar();
		  if(BASE.getMsg().equals("SI")){	
			  listar_actividades();
			  listar_det_actividades();  
			  BASE.getBaseDatos().cerrarConexion(); 
			  return SUCCESS;
		  }else{
			  this.addActionError("No hay conexion al servidor");
		      return ERROR;
		  }
     }
    

	public String getActividad() {
		return actividad;
	}

	public void setActividad(String actividad) {
		this.actividad = actividad;
	}

	public String getDetalle() {
		return detalle;
	}

	public void setDetalle(String detalle) {
		this.detalle = detalle;
	}

	public String getObs() {
		return obs;
	}

	public void setObs(String obs) {
		this.obs = obs;
	}

	public String getCod_prospecto() {
		return cod_prospecto;
	}

	public void setCod_prospecto(String cod_prospecto) {
		this.cod_prospecto = cod_prospecto;
	}

    public LinkedList<Actividad> getHistorico() {
		return historico;
	}

	public void setHistorico(LinkedList<Actividad> historico) {
		this.historico = historico;
	}
	public String getDestinatario() {
		return destinatario;
	}

	public void setDestinatario(String destinatario) {
		this.destinatario = destinatario;
	}
	public String getMensaje() {
		return mensaje;
	}
	public void setMensaje(String mensaje) {
		this.mensaje = mensaje;
	}
	public String getCodigo() {
		return codigo;
	}
	public void setCodigo(String codigo) {
		this.codigo = codigo;
	}
	public List<Listax> getActividades() {
		return actividades;
	}
	public void setActividades(List<Listax> actividades) {
		this.actividades = actividades;
	}
	public List<Listax> getDetalle_act() {
		return detalle_act;
	}
	public void setDetalle_act(List<Listax> detalle_act) {
		this.detalle_act = detalle_act;
	}
	public String getTipo() {
		return tipo;
	}
	public void setTipo(String tipo) {
		this.tipo = tipo;
	}
	
}
